<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>README</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */

/* RESET
=============================================================================*/

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
}

/* BODY
=============================================================================*/

body {
  font-family: Helvetica, arial, freesans, clean, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  background-color: #fff;
  padding: 20px;
  max-width: 960px;
  margin: 0 auto;
}

body>*:first-child {
  margin-top: 0 !important;
}

body>*:last-child {
  margin-bottom: 0 !important;
}

/* BLOCKS
=============================================================================*/

p, blockquote, ul, ol, dl, table, pre {
  margin: 15px 0;
}

/* HEADERS
=============================================================================*/

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
}

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
  font-size: inherit;
}

h1 {
  font-size: 28px;
  color: #000;
}

h2 {
  font-size: 24px;
  border-bottom: 1px solid #ccc;
  color: #000;
}

h3 {
  font-size: 18px;
}

h4 {
  font-size: 16px;
}

h5 {
  font-size: 14px;
}

h6 {
  color: #777;
  font-size: 14px;
}

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
  margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
  color: #4183C4;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
  padding-left: 30px;
}

ul li > :first-child, 
ol li > :first-child, 
ul li ul:first-of-type, 
ol li ol:first-of-type, 
ul li ol:first-of-type, 
ol li ul:first-of-type {
  margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
  margin-bottom: 0;
}

dl {
  padding: 0;
}

dl dt {
  font-size: 14px;
  font-weight: bold;
  font-style: italic;
  padding: 0;
  margin: 15px 0 5px;
}

dl dt:first-child {
  padding: 0;
}

dl dt>:first-child {
  margin-top: 0px;
}

dl dt>:last-child {
  margin-bottom: 0px;
}

dl dd {
  margin: 0 0 15px;
  padding: 0 15px;
}

dl dd>:first-child {
  margin-top: 0px;
}

dl dd>:last-child {
  margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
  font-size: 12px;
  font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
  margin: 0 0px;
  padding: 0px 0px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px;
}

pre>code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent;
}

pre {
  background-color: #f8f8f8;
  border: 1px solid #ccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre code, pre tt {
  background-color: transparent;
  border: none;
}

kbd {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #DDDDDD;
    background-image: linear-gradient(#F1F1F1, #DDDDDD);
    background-repeat: repeat-x;
    border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
    border-image: none;
    border-radius: 2px 2px 2px 2px;
    border-style: solid;
    border-width: 1px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    line-height: 10px;
    padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
  border-left: 4px solid #DDD;
  padding: 0 15px;
  color: #777;
}

blockquote>:first-child {
  margin-top: 0px;
}

blockquote>:last-child {
  margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
  clear: both;
  margin: 15px 0;
  height: 0px;
  overflow: hidden;
  border: none;
  background: transparent;
  border-bottom: 4px solid #ddd;
  padding: 0;
}

/* TABLES
=============================================================================*/

table th {
  font-weight: bold;
}

table th, table td {
  border: 1px solid #ccc;
  padding: 6px 13px;
}

table tr {
  border-top: 1px solid #ccc;
  background-color: #fff;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
  max-width: 100%
}
</style>
<base href='file:\\\D:\WorkSpace\Protobuf2Fiddler\'/>
</head>
<body>
<h1 id="protobuf-to-fiddler">Protobuf to fiddler</h1>
<p>一个基于Fiddler的Proto部分解包工具</p>
<h2 id="-">使用说明</h2>
<h3 id="-">安装</h3>
<ol>
<li>下载安装 <strong><a href="http://www.telerik.com/download/fiddler">Fiddler2 for .Net Framework4</a></strong><br><img src="http://gitlab.baidu.com/zhaoguowei/documents/raw/master/Protobuf2Fiddler/DownloadFiddler.png" alt="Download Fiddler"></li>
<li><p>下载项目源码或者编译好的压缩包</p>
</li>
<li><p>将编译或者下载后的文件放置到 <code>Documents\Fiddler2\Inspectors</code>文件夹或者<code>Program Files\Fiddler2\Inspectors</code> 32bit系统 <code>Program Files (x86)\Fiddler2\Inspectors</code> 64bit系统<br><img src="http://gitlab.baidu.com/zhaoguowei/documents/raw/master/Protobuf2Fiddler/unzipplugin.png" alt="UpzipPlugins"></p>
</li>
</ol>
<p><em>tip:</em><br>    放置在<code>Documents</code>下插件只对当前用户有效，放置在<code>Program Files</code>中可能导致配置文件写入时的权限问题</p>
<h3 id="-">使用</h3>
<ol>
<li>安装完毕插件后启动Fiddler，在Fiddler中选择一个Session</li>
<li>在右侧的 Inspectors 选项卡中可以看到 <strong>Protobuf</strong> 功能<br><img src="http://gitlab.baidu.com/zhaoguowei/documents/raw/master/Protobuf2Fiddler/protobuftab.png" alt="ProtobufTab"></li>
<li>点击<strong>Browse</strong> ，选择<strong>Proto</strong>文件的文件夹<br><img src="http://gitlab.baidu.com/zhaoguowei/documents/raw/master/Protobuf2Fiddler/chooseproto.png" alt="ChooseFolder"></li>
<li>在MessageType 中可以看到文件夹中的Proto文件中定义的Message信息</li>
<li>在Fiddler中选择一个需要解析的Session，在<code>Inspectors-&gt;Protobuf</code>中可以看到Raw解的结果<br><img src="http://gitlab.baidu.com/zhaoguowei/documents/raw/master/Protobuf2Fiddler/RawDecode.png" alt="rawDecode"></li>
<li>如果需要Key-Value解析，配置该URL对应的Message Type (如果有嵌套的Message Type，请选择根Message Type)，如果数据与Proto文件匹配即可解析出Key-Value结果。<br><img src="http://gitlab.baidu.com/zhaoguowei/documents/raw/master/Protobuf2Fiddler/keyDecode.png" alt="keyDecode"></li>
</ol>
<p><em>配置的URL与Message Type的映射会自动保存。</em><br><em>配置完毕后需要重新选择需要解码的Session才能显示</em></p>
<h2 id="-">开发环境</h2>
<p><strong>需求：</strong> .Net Framework 4 、Visual Studio 2010 +、Windows</p>
<h2 id="-">项目说明</h2>
<ul>
<li><p><strong><a href="https://code.google.com/p/protobuf-net/">Protobuf-net</a>:</strong>一个基于.Net的Protobuf转换工具，用于Protobuf 的序列化和反序列化。在本项目中的用途是用于解析Proto文件，生成Proto文件中的Message的列表</p>
</li>
<li><p><strong>ProtobufGen:Protobuf .Net</strong>项目中带的模块，用于根据Proto文件生成对应的.Net 代码。本项目被修改，主要增加了直接根据Proto文件生成.Net DLL，可以动态在.Net 语言中加载用于带类型的解包(早期方案)，通过Protoc.exe进行Protobuf文件的Raw解,Key-Value解(现在方案)。已经加入扩展方法，支持根据字符串生成Protobuf。预备增加新方法可以直接根据Json生成Protobuf</p>
</li>
</ul>
<ul>
<li><strong>Protobuf2Fiddler:</strong>Fiddler的扩展，继承了Inspectors2、IRequestInspector和IResponseInspector，支持Protobuf的解包并且在Fiddler中展示 </li>
</ul>

</body>
</html>
<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->
